Kyuubi 编译配置和使用指南 | 您所在的位置:网站首页 › apache sentry停止维护 › Kyuubi 编译配置和使用指南 |
背景
Kyuubi是一个基于Spark构建的,针对大规模数据处理分析的,支持统一多租户的JDBC接口服务。本篇围绕Kyuubi的编译,配置,部署和使用展开介绍。 环境信息 CentOS 7.4 Kyuubi 1.6.0-incubating Spark 3.1 编译注意:Kyuubi不支持scala 2.11。即要求Spark和Flink的Scala版本为2.12。链接:https://github.com/apache/incubator-kyuubi/issues/2903。 首先从GitHub clone项目到本地: git clone https://github.com/apache/incubator-kyuubi.git切换到需要编译的分支之后。执行: build/dist --tgz --flink-provided --spark-provided --hive-provided -Pspark3.1 -Pflink-1.14开始编译和打包过程。编译完成后软件tar包会自动在源代码根目录生成。 配置全部配置项的官网介绍:https://kyuubi.apache.org/docs/latest/deployment/settings.html kyuubi-defaults.conf 配置 Kyuubi Server IP端口配置 kyuubi.frontend.bind.host: server host。需要配置为本机hostname,IP,或者0.0.0.0 kyuubi.frontend.bind.port: server 端口号。 HA配置Kyuubi Server支持高可用。我们可以使用Zookeeper提供Kyuubi的服务发现功能。 kyuubi.ha.client.class: 使用Zookeeper需要配置org.apache.kyuubi.ha.client.zookeeper.ZookeeperDiscoveryClient kyuubi.ha.addresses: Zookeeper的地址 kyuubi.ha.namespace: 如果一套Zookeeper集群维护了多个HA Kyuubi集群,需要配置不同的namespace加以区分。在Zookeeper中namespace对应Kyuubi server状态信息保存的根ZNode。默认为kyuubi。注意:如果启用了Kerberos,需要增加如下配置: kyuubi.ha.zookeeper.auth.type: 配置为KERBEROS kyuubi.ha.zookeeper.auth.principal: Zookeeper认证使用的principal kyuubi.ha.zookeeper.auth.keytab: Zookeeper认证使用的keytab Kyuubi Server Kerberos认证配置 kyuubi.authentication: 配置为KERBEROS kyuubi.kinit.principal: Kyuubi使用的Kerberos principal kyuubi.kinit.keytab: Kyuubi使用的Kerberos principal对应的keytab注意: 如果Kyuubi server使用的principal对应Hadoop的用户没有访问HDFS和提交Yarn作业的权限,则只能使用user impersonation。 Kyuubi的Principal必须具有3段式命名,例如kyuubi/[email protected]。否则会出现:Caused by: javax.security.auth.login.LoginException: Kerberos principal should have 3 parts: [email protected] 如果kyuubi server日志出现org.apache.zookeeper.KeeperException$InvalidACLException: KeeperErrorCode = InvalidACL for /kyuubi。需要将kyuubi.ha.zookeeper.auth.principal和kyuubi.ha.zookeeper.auth.keytab配置为kyuubi对应的principal和keytab。 Engine类型配置 kyuubi.engine.type: 默认为SPARK_SQL。支持SPARK_SQL,FLINK_SQL,TRINO,HIVE_SQL和JDBC。 引擎共享策略配置对应配置项为:kyuubi.engine.share.level 。支持如下配置值: CONNECTION: Engine不共享,每个连接都会创建一个对应的engine为之服务。 USER: 相同用户使用同一个Engine。此项为默认值。 GROUP:属于同一组的用户使用同一个Engine。 SERVER:所有用户共享同一个Engine。 kyuubi-env.sh 配置kyuubi-env.sh用来配置环境信息。例如JAVA_HOME,Spark/Flink安装目录,配置文件目录等。按照配置文件中注释补充需要的配置项即可。例如使用Spark Engine的时候我们必须配置: SPARK_HOME HADOOP_CONF_DIR YARN_CONF_DIR HIVE_HOME HIVE_CONF_DIR User impersonation 配置例如启动Kyuubi server对应的Hadoop用户为kyuubi。编辑core-site.xml。加入如下配置: hadoop.proxyuser.kyuubi.hosts * hadoop.proxyuser.kyuubi.users * hadoop.proxyuser.kyuubi.groups *保存后重启HDFS和Yarn。 注意:这里配置值使用*会导致可代理的用户范围过大,实际使用时酌情调整。 HA部署由于生产模式多用HA,且单机模式较为简单,这里只介绍HA的配置方式。 HA模式部署需要将Kyuubi复制到各个节点上。 如果启用了Kerberos,需要创建出每个节点Kyuubi使用的principal。比如3节点集群:host1,host2和host3,需要在Kerberos中创建3个principal: kyuubi/[email protected] kyuubi/[email protected] kyuubi/[email protected]接下来使用Kerberos创建这3个principal对应的keytab文件,分别放置到对应节点的同一目录下,例如/etc/security/keytabs/kyuubi.service.keytab。 然后在每个Kyuubi节点,分别修改它们的配置文件。需要关注的配置项如下: kyuubi.frontend.bind.host xxx.xxx.xxx.xxx kyuubi.ha.client.class org.apache.kyuubi.ha.client.zookeeper.ZookeeperDiscoveryClient kyuubi.ha.addresses zk1:2181,zk2:2181,zk3:2181 kyuubi.ha.namespace kyuubi kyuubi.ha.zookeeper.auth.type KERBEROS kyuubi.ha.zookeeper.auth.principal kyuubi/_HOST@INSIGHT kyuubi.ha.zookeeper.auth.keytab /etc/security/keytabs/kyuubi.service.keytab需要注意的是: kyuubi.frontend.bind.host 不能配置0.0.0.0,必须配置本机IP或者hostname。否则Zookeeper的/kyuubinode的数据为: [zk: zk1:2181(CONNECTED) 2] ls /kyuubi [serviceUri=0.0.0.0:10009;version=1.7.0;sequence=0000000006, serviceUri=0.0.0.0:10009;version=1.7.0;sequence=0000000007, serviceri=0.0.0.0:10009;version=1.7.0;sequence=0000000008]明显可以看出三个节点的serviceUri完全相同,这样HA是无法工作的。 kyuubi.ha.zookeeper.auth.principal使用kyuubi/_HOST@INSIGHT。hostname部分使用_HOST。最后依次在各个节点的Kyuubi安装目录,执行bin/kyuubi start,启动kyuubi。 权限配置Kyuubi要求kyuubi用户必须要有访问HDFS数据目录(表数据的存放目录)和home目录(/user/kyuubi)的权限,以及提交任务到Yarn队列的权限。在启动Kyuubi服务之前需要通过Ranger配置kyuubi具有上述权限。 启动服务kyuubi服务启动/停止/重启: bin/kyuubi start/stop/restart如果启用了HA,可在多个节点使用相同配置启动多个Kyuubi Server实例。参见前面章节。 连接Kyuubi连接Kerberos认证的集群前需要kinit: kinit kyuubi/hostname@PAULTECH -kt /etc/security/keytabs/kyuubi.keytab以下命令需要进入到Kyuubi安装目录的bin目录执行。 非HA方式连接: ./beeline -u 'jdbc:hive2://kyuubi_server:10009/;principal=kyuubi/_HOST@PAULTECH'HA方式连接: ./beeline -u 'jdbc:hive2://zk1:2181,zk2:2181,zk3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=kyuubi;principal=kyuubi/_HOST@PAULTECH'注意,非Kerberos集群使用无需指定principal参数。指定用户名使用-n 用户名方式,如下所示: ./beeline -u 'jdbc:hive2://zk1:2181,zk2:2181,zk3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=kyuubi' -n kyuubi连接URL参数解析: serviceDiscoveryMode: zooKeeper表示使用Zookeeper作为服务发现,配置HA的时候使用。 zooKeeperNamespace: 对应kyuubi-defaults.conf中的kyuubi.ha.namespace。zk命名空间。 principal: 连接Kerberos集群的时候需要指定Kyuubi的principal。和kyuubi-defaults.conf中的kyuubi.kinit.principal相同。否则会认证失败。 多租户Kyuubi在设计上支持多租户。目前Spark Engine对多租户的支持最为完善。使用租户身份连接Kyuubi server有如下两种方法。 方法一kinit Kyuubi Server启动用户对应的principal。连接URL中principal配置Kyuubi Server用户对应的principal。然后在连接URL后增加hive.server2.proxy.user参数,指定使用哪个租户。要求租户需要具有HDFS访问权限和Yarn队列提交任务权限。 例如租户为paul时,我们执行: ./beeline -u 'jdbc:hive2://zk1:2181,zk2:2181,zk3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=kyuubi;principal=kyuubi/_HOST@PAULTECH;hive.server2.proxy.user=paul'可以看到Kyuubi engine启动执行spark-submit使用的--proxy-user参数为paul。 方法二kinit租户对应的principal。连接URL中principal配置Kyuubi Server用户对应的principal。 需要注意:如果租户访问(例如使用beeline)和Kyuubi Server在同一个节点时,不要和Kyuubi Server公用一个ticket cache。建议切换到其他Linux用户再执行kinit。 然后执行如下命令。不再需要添加hive.server2.proxy.user参数。 ./beeline -u 'jdbc:hive2://zk1:2181,zk2:2181,zk3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=kyuubi;principal=kyuubi/_HOST@PAULTECH' 备注可以使用spark.yarn.queue指定Spark Engine在Yarn的哪个队列中运行。该配置可以写到连接URL中或者是kyuubi-defaults.conf中。 兼容Hudi Spark如果我们直接使用Kyuubi连接集成Hudi的Spark,可以查询表数据,但是在创建表或者插入数据的时候会出现问题。因此,使用Kyuubi连接集成了Hudi的Spark需要做特殊配置。下面给出步骤。 首先需要将hudi-spark3.x-bundlejar包放入${SPARK_HOME}/jars目录,这样启动Spark engine的时候无需再指定加载hudi相关的jar包。 然后修改${SPARK_HOME}/conf/spark-defaults.conf文件。对于Hudi 0.11.1,增加: spark.serializer=org.apache.spark.serializer.KryoSerializer spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension对于Hudi 0.13.x版本增加: spark.serializer=org.apache.spark.serializer.KryoSerializer spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension接着查看Yarn中是否有已经启动的Kyuubi Spark Engine应用。如果有,需要手工kill掉。最后使用beeline工具重新连接,即可使用Kyuubi操作Spark Hudi表。 Kyuubi 1.7.0 更新 环境信息 Kyuubi 1.7.0 Flink 1.15.x Spark 3.3.x 编译命令 build/dist --tgz --flink-provided --spark-provided --hive-provided -Pspark-3.3 -Pflink-1.15 使用Spark on Yarn engine默认情况Kyuubi使用Spark standalone engine。如果需要使用Spark on Yarn engine。需要在kyuubi-defaults.conf中增加: spark.master yarn spark.yarn.queue default保存后重新启动Kyuubi。 |
CopyRight 2018-2019 实验室设备网 版权所有 |